home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 1992 August / info-mac-1992.iso / Applications (app) / Ray Tracer / tracer.c < prev   
Text File  |  1989-04-28  |  3KB  |  135 lines

  1. #define _MC68881_
  2.  
  3. /* tracer version 2.1 */
  4. #include <stdio.h>
  5. #include <math.h>
  6. #include "rtd.h"
  7. #include "macros.h"
  8.  
  9.  
  10. FILE * fp;
  11. double  (*suzie)[300],
  12.         sam = 1.0;
  13. int     xsue,
  14.         ysue;
  15. struct ball *bl[150];
  16. int     level,
  17.         nob;
  18. struct sphere   ls;
  19.  
  20.  
  21. #ifdef THINK_C 
  22. _main (argc, argv)
  23. #else
  24. main (argc, argv)
  25. #endif
  26.  
  27. int     argc;
  28. char  **argv;
  29. {
  30.     char * mlalloc();
  31.     FILE * df, *texfile;
  32.     static double   xco,
  33.                     yco;
  34.     struct ray  rr;
  35.     struct vector   vp;
  36.     double  x,
  37.             y,
  38.             z;
  39.     int     i,
  40.             in = 0,
  41.             out = 0,
  42.             tex = 0;
  43.     int     c;
  44.  
  45.  
  46.     suzie = (double (*)[]) mlalloc(sizeof(double) * 300L * 300L);
  47.     if (suzie == NULL) booboo("Out of memory.");
  48.     
  49. /* command interp */
  50.     
  51.     for (i = 1; i < argc; i++) {
  52.     if (argv[i][0] != '-')
  53.         booboo ("Options strt with a '-' bozo");
  54.     c = argv[i][1];
  55.  
  56.     switch (c) {
  57.         case ('i'): 
  58.         if (in)
  59.             booboo ("Sorry, but you may only have one input file");
  60.         in = 1;
  61.         if ((i + 1) >= argc || argv[i + 1][0] == '-')/* no arg */
  62.             df = stdin;
  63.         else
  64.             if ((df = fopen (argv[++i], "r")) == NULL)
  65.             booboo ("input file not found");
  66.         break;
  67.         case ('o'): 
  68.         if (out)
  69.             booboo ("Sorry, but you may have only one output file");
  70.         out = 1;
  71.         if ((i + 1) >= argc || argv[i + 1][0] == '-')/* no arg */
  72.             fp = stdout;
  73.         else
  74.             fp = fopen (argv[++i], "w");
  75.         break;
  76.         case ('s'): 
  77.         if (tex)
  78.             booboo ("Sorry, but you may have only one image file");
  79.         if ((i + 1) >= argc || argv[i + 1][0] == '-')/* no arg */
  80.             booboo ("-s requires an argument");
  81.         tex = 1;
  82.         if ((texfile = fopen (argv[++i], "r")) == NULL)
  83.             booboo ("image file not found");
  84.         break;
  85.         booboo ("this line shouldn't do anything");
  86.         case ('S'): 
  87.         if (argv[i][2] < '0' || argv[i][2] > '9'){
  88. printf("%c\n",argv[i][2]);
  89.             booboo ("-S needs a numerical argument");}
  90.         sam = atof (&(argv[i][2]));
  91.         break;
  92.         default: 
  93.         booboo ("Unrecognized option. Better try again");
  94.     }
  95.     }
  96.  
  97.  
  98.     if (!in)
  99.     if ((df = fopen ("bdata.i", "r")) == NULL)
  100.         booboo ("bdata.i not found");
  101.     if (!out)
  102.     fp = fopen ("data.dis", "w");
  103.     if (!tex)
  104.     if ((texfile = fopen ("pat.def", "r")) == NULL)
  105.         booboo ("pat.def not found");
  106.  
  107.  
  108.  
  109.     nob = g_bal (df);
  110.     g_bod (texfile);
  111.  
  112.  
  113.  
  114.     MV (95.0, 140.0, -200.0, vp);
  115.     MV (0.0, 900.0, 0.0, ls.cent);
  116.     ls.rad = 40;
  117.     fprintf (fp, "%d %d\n", (int) ((XMAX - XMIN) * SCALE +0.9999999),
  118.                                  (int) ((YMAX - YMIN) * SCALE +0.9999999));
  119.  
  120.     for (yco = YMAX * SCALE; yco > YMIN * SCALE; yco--) {
  121.         printf("Scan-line %lf\n",yco);
  122.     for (xco = XMIN * SCALE; xco < XMAX * SCALE; xco++) {
  123.         CallStdEvent();
  124.         MV (xco / SCALE, yco / SCALE, 0.0, rr.org);
  125.         SV (rr.dir, rr.org, vp);
  126.         fprintf (fp, "%c", shade (&rr));
  127.     }
  128.     }
  129. }
  130.  
  131. booboo (str)
  132. char   *str; {
  133.     printf ("%s\n", str);
  134.     exit (-1);
  135. }